package com.bosssoft.common.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtil {

    /**
     * ObjectMapper 是 Jackson 库中的核心类，用于处理 JSON 数据的序列化和反序列化。
     * 这里定义了一个静态常量 objectMapper，供本工具类的各方法使用。
     */
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 将对象序列化为 JSON 字符串。
     *
     * @param obj 需要序列化的对象
     * @return 序列化后的 JSON 字符串
     * @throws JsonProcessingException 如果对象不能被序列化为 JSON，将抛出此异常
     */
    public static String toJson(Object obj) throws JsonProcessingException {
        // 使用 objectMapper 将对象转换为 JSON 字符串
        return objectMapper.writeValueAsString(obj);
    }

    /**
     * 将 JSON 字符串反序列化为指定类的对象。
     *
     * @param json 需要反序列化的 JSON 字符串
     * @param clazz 目标对象的类类型
     * @param <T> 目标对象的类型
     * @return 反序列化后的对象
     * @throws JsonProcessingException 如果 JSON 字符串不能被解析为对象，将抛出此异常
     */
    public static <T> T fromJson(String json, Class<T> clazz) throws JsonProcessingException {
        // 使用 objectMapper 将 JSON 字符串转换为指定类型的对象
        return objectMapper.readValue(json, clazz);
    }
}
